<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie du plugin «Langues» pour Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class pLanguesComportementsAdmin
{
	
	
	public static function adminPageApresAccordeonHTML($exceptions, $page, $module)
	{
		
		global $core;
		$langues = new pLangues($core);
		
		# Valeurs initiales
		if($module->erreursFormulairePresentes())
		{
			
			# Page non originale
			if(empty($_POST['traductions_page_id']) || !is_array($_POST['traductions_page_id']))
			{
				$page_originale = false;
				$page_originale_id = (integer) $_POST['traduction_page_originale_id'];				
				
			}
			# Page originale
			else
			{
				$page_originale = true;
				$traductionsFormulaire = $_POST['traductions_page_id'];
				$page_originale_id = '';
			}
			
		}
		else
		{
			
			# Page non originale
			if(!$langues->estOriginale($page->page_id))
			{
				$page_originale = false;
				$page_originale_id = $langues->getIdentifiantPageOriginale($page->page_id);
				$page_originale_id = $page_originale_id !== false ? $page_originale_id : '';
			}
			# Page originale
			else
			{
				$page_originale = true;
				$traductionsFormulaire = false;
			}
		}
		
		# HTML
		$html = '';
		$affiche_selecteur_traduction = '';
		
		# Page originale
		if($page_originale)
		{
			
			$traductions = $langues->getTraductions($page->page_id);
			
			$html.= 
			'<div id="traductions_wrapper">'.
				'<p>'.__('Cette page a été traduite:').'</p>'.
				'<ul class="traductions">';
			
			foreach($traductions as $traduction)
			{
				if($traduction['page_id'] != $page->page_id && ($traductionsFormulaire === false || in_array($traduction['page_id'], $traductionsFormulaire)))
				{

					$html.=
					'<li>'.
						html::escapeHTML($traduction['page_titre']).
						' <span class="traduction_langue">('.html::escapeHTML($traduction['page_langue']).')</span>'.
						'<a href="#" class="supprimerTraduction"><img src="images/16/supprimer.png" alt="'.__('Supprimer').'" /></a>'.
						form::hidden(array('traductions_page_id[]', ''), $traduction['page_id']).
					'</li>';
				}
			}
			
			$html.=
			'</div>';
			
			$affiche_selecteur_traduction = ' style="display:none;"';
			
		}
		
		# Tout type de page
		$html.=
		'<p class="onTop selecteurTraduction"'.$affiche_selecteur_traduction.'>'.
			'<label for="traduction_page_originale_id">'.__('Cette page est une traduction de:').'</label>'.
			form::hidden('traduction_page_originale_id', $page_originale_id).
			'<span id="traduction_page_originale_titre">'.__('[pas de sélection]').'</span> '.
			'<a href="#" id="traduction_page_originale_choisir">'.__('Choisir...').'</a>';
			
		$msgErreur = $module->getErreurFormulaire('traduction_page_originale_choisir');
		if(!empty($msgErreur)) {
			$html.=
			'<span class="erreur">'.$msgErreur.'</span>';
		}
			
		$html.=
			'<a style="display:block;" href="#" id="traduction_page_originale_annuler">'.__('Annuler la sélection').'</a>'.
		'</p>';
		
		return sprintf(
		'<h3>'.__('Traduction').'</h3>'.
		'<div>%s</div>',
		$html
		);
		
	}
	
	
	public static function adminProprietesEnregistrer($exceptions, $page, $cur, $formulaire)
	{

		global $core;
		$langues = new pLangues($core);

		# Définir en tant que page traduite
		if(empty($formulaire['traductions_page_id']) || !is_array($formulaire['traductions_page_id']))
		{
			
			# Impossible que la page soit une traduction d'elle-même
			if((integer) $formulaire['traduction_page_originale_id'] == $page->page_id) {
				throw new cpErreur(__('Une page ne peut pas être une traduction d\'elle-même.'), 'traduction_page_originale_choisir', 103);
			}
			
			# Une page ne peut pas être une traduction d'une page dans la même langue
			if($core->con->select('SELECT page_langue FROM '.$core->prefix.'pub_pages WHERE page_id = '.(integer) $formulaire['traduction_page_originale_id'])->page_langue == $cur->page_langue ||
				$core->con->select('SELECT page_langue FROM '.$core->prefix.'temp_pages WHERE page_id = '.(integer) $formulaire['traduction_page_originale_id'])->page_langue == $cur->page_langue
			) {
				throw new cpErreur(__('La page sélectionnée est dans la même langue que cette page.'), 'traduction_page_originale_choisir', 103);
			}
			
			# Si c'est présentement une page originale
			if($langues->estOriginale($page->page_id))
			{
				$core->con->execute('DELETE FROM '.$core->prefix.'traductions '.
					'WHERE page_originale_id = '.(integer) $page->page_id
				);
			}
			
			# Définir en tant que page traduite
			if(!empty($formulaire['traduction_page_originale_id']) && is_numeric($formulaire['traduction_page_originale_id']))
			{
				
				# Vérifier que la page originale existe
				$rs = $core->con->select('SELECT count(page_id) FROM '.$core->prefix.'pub_pages '.
					'WHERE page_id = '.(integer) $formulaire['traduction_page_originale_id']
				);
				
				if($rs->f(0) == 0) {
					throw new cpErreur(__('La page sélectionnée n\'existe pas.'), 'traduction_page_originale_choisir', 103);
				}
							
				$page_originale_id = (integer) $formulaire['traduction_page_originale_id'];
				
				# Vérifions si la page originale est la traduction d'une autre
				$rs = $core->con->select(
					'SELECT page_originale_id FROM '.$core->prefix.'traductions '.
					'WHERE page_traduite_id = '.(integer) $page_originale_id
				);
				
				if(!$rs->isEmpty()) {
					$page_orignale_id = (integer) $rs->page_originale_id;					
				}
				
				$core->con->execute(
					'DELETE FROM '.$core->prefix.'traductions '.
					'WHERE page_traduite_id = '.$page->page_id
				);
				
				# Vérifions qu'il n'existe pas d'autres traductions dans la même langue...
				$traductions = $langues->getTraductions($page_originale_id);
				
				if(isset($traductions[$cur->page_langue])) {
					throw new cpErreur(__('La page sélectionnée a déjà été traduite dans cette langue.'), 'traduction_page_originale_choisir', 101);
				}
				
				$cur = $core->con->openCursor($core->prefix.'traductions');
				$cur->page_originale_id = (integer) $page_originale_id;
				$cur->page_traduite_id = (integer) $page->page_id;
				$cur->insert();
				
			}
			else
			{
				$core->con->execute(
					'DELETE FROM '.$core->prefix.'traductions '.
					'WHERE page_traduite_id = '.$page->page_id
				);
			}
			
		}
		# Définir en tant que page originale
		else
		{
			
			# On supprime simplement les traductions qui ont été supprimées par l'utilisateur
			$sql = array();
			foreach($formulaire['traductions_page_id'] as $page_id)
			{
				$sql[] = 'page_traduite_id != '.(integer) $page_id;
			}
			
			$core->con->execute('DELETE FROM '.$core->prefix.'traductions '.
				'WHERE '.implode(' AND ', $sql).' LIMIT '.count($formulaire['traductions_page_id'])
			);
			
		}
	
	}
	
	
	public static function adminJavascript($js)
	{
		
		switch($js):
		
			case modifierPage:
				return file_get_contents(dirname(__FILE__).'/js/modifierPage.js');
			break;
		
		endswitch;
		
	}
	
	
}

?>